Zod에 대한 설명 과 Zod 활용 방법

Zod는 TypeScript를 우선으로 하는 스키마 선언 및 검증 라이브러리입니다. Zod의 공식 홈페이지를 가면 볼 수 있는 글귀다.

현재 모던 웹 개발에서 Zod는 2025년 5월 1일 기준 주간 다운로드 수 26,388,663의 엄청나게 많은 다운로드 수를 보유하고있는 인기가 많은 라이브러리이다.

보통 React Hook Form 라이브러리를 사용 하게되면 zod라는 라이브러리도 볼 수 있는데 이게 대체 왜 인기가 많고 타입스크립트에서 부족한 점은 무엇이며 어떤점이 간편하고 어떤 강점이 있는지 알아보도록 하자


먼저 zod라는 라이브러리가 나오게 된 계기는 TypeScript의 한계점 때문이라고 할 수 있다.

타입스크립트의 동작 방식을 간단히 설명하면 타입스크립트로 작성 된 코드는 토큰화 되고 그를 바탕으로 AST(추상 구문 트리)가 생성되며 타입 체커가 동작하고 트랜스 파일러가 TS AST를 JS AST로 바꾼다음 js파일로 변환된다 그리고 컴파일 과정에서 타입에 대한 정보는 제거된다.

즉 타입스크립트의 타입체킹은 컴파일 과정에서 동작하는 것이지 그후 런타임에서는 타입체킹을 하지않는다는 것이다. 런타임에서 동작하는것은 타입스크립트가 아닌 자바스크립트 파일이 동작하기 때문이다.

그럼 코드가 실행 중인 런타임에서 사용자가 입력 폼을 입력하거나 혹은 데이터 통신으로 데이터를 주고 받고 할때의 타입 체크는 불가 하다는 것이다.

zod는 런타임에서 동작하기 때문에 런타임 검증 격차를 줄여줄 수 있는것이다.


그렇다면 zod가 런타임에서 타입을 체크하고 예상치 못한 오류를 잡아준다는 사실을 알았다.

그럼 zod는 어떤 방식으로 사용을 할까?
일단 먼저 zod를 활용한 스키마 생성의 예제 코드를 작성해보겠다.

const userSchema = z.object({
     name: z.string(),
     age: z.number()
   });

userSchema는 name , age라는 값을 가지고 있고 각각 문자열 , 숫자 타입을 부여 받고 있다는 뜻이다. 이런식으로 보기 직관적이라 어떤 타입이 작성되어있는지 크게 학습의 부담 없이 알수 있다는것도 zod가 인기가 많은 점중 하나일것이다.

그럼 이 스키마를 어떻게 검증하느냐?

userSchema.parse({
	name : "홍길동",
	age : 19
})

/* return
	name : "홍길동",
	age : 19
**/

이런식으로 parse 라는 메서드로 스키마를 검증할 수 있다.
만약 타입이 틀린 값이 들어간다면 throws Error가 발생한다.

거기다가 이 완성된 스키마를

	type userType = z.infer(typeof userSchema);

	const user : userType

이런식으로 infer 메서드를 사용하면 만들어둔 스키마를 타입으로 변환하여 사용할 수 있게된다.
이렇게 Zod는 스키마를 생성하면 굳이 불필요하게 중복으로 타입을 만들지 않아도 되고 타입스크립트의 개발단계에서 타입을 체크하는 강력한 기능과 Zod의 런타임에서의 타입 체크 즉 상호보완적인 관계라고 볼 수 있겠다.


덤으로

zod는 단순하게 스키마를 생성하고 타입으로 치환하는것 뿐만 아니라 최대, 최솟값 이메일 양식, or , and 오류발생시 리턴되는 경고문이라던지 정말 다양하고 우리가 타입스크립트를 사용하면서 타입 외에도 추가적으로 조건문을 세워야 했던걸 기능으로 제공해주니 추가적으로 작성해야 할 코드가 줄어들고 개발자 입장에서 정말 간편한 라이브러리로 취급된다.

타입스크립트를 학습하고 있는 개발자라면 덤으로 zod는 꼭 알아야 될 정도의 라이브러리라고 생각하며 이만 글을 마친다.